package com.yxw.yxnet_cd_center.customer_service.service;


import com.baomidou.mybatisplus.extension.service.IService;
import com.yxw.yxnet_cd_center.customer_service.dto.DeptDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.DeptQueryDTO;
import com.yxw.yxnet_cd_center.customer_service.dto.SubsDTO;
import com.yxw.yxnet_cd_center.customer_service.entity.YxCsDeptEntity;
import com.yxw.yxnet_cd_center.customer_service.vo.DeptTreeItemVO;
import com.yxw.yxnet_cd_center.customer_service.vo.DeptVO;
import com.yxw.yxnet_cd_center.customer_service.vo.UserEmpVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 部门管理Service接口
 * 
 * @author xiexuxin
 * @date 2023-09-14
 */
public interface IDeptService extends IService<YxCsDeptEntity> {

    /**
     * 添加部门
     * @param deptDTO
     */
    void addNewDept(DeptDTO deptDTO);

    /**
     * 添加子部门
     * @param subsDTO
     */
    void addNewSubdivision(SubsDTO subsDTO);

    /**
     * 根据id批量删除部门
     * @param deptIds
     */
    void deleteByDeptIds(@Param("deptIds") List<Long> deptIds);

    /**
     * 修改部门
     * @param deptId
     * @param deptDTO
     */
    void updateInfoById(Long deptId,DeptDTO deptDTO);

    /**
     * 修改子部门
     * @param deptId
     * @param subsDTO
     */
    void updateSubsById(Long deptId,SubsDTO subsDTO);

    /**
     * 统计匹配名称查到匹配ID的部门数量，用于修改数据时判断名称是否被占用
     *
     * @param deptId   部门ID
     * @param deptName 部门名称
     * @return 匹配的部门的数量
     */
    int countByNameAndNotId(Long deptId, String deptName);

    /**
     * 根据部门Id查询部门
     *
     * @param deptId
     * @return
     */
     DeptVO selectByDeptId(Long deptId);

    /**
     * 查询部门列表
     * @return
     */
    List<DeptVO> deptList();

    /**
     * 获取部门下拉列表
     * @param deptVOList
     * @return
     */
    List<DeptTreeItemVO> buildDeptTreeList(List<DeptVO> deptVOList);

    /**
     * 根据查询条件返回列表
     * @param deptQueryDTO
     * @return
     */
    List<DeptVO> getDeptList(DeptQueryDTO deptQueryDTO);

    /**
     * 将列表转化成树
     * @param deptVOList
     * @return
     */
    List<DeptVO> getDeptTree(List<DeptVO> deptVOList);

    /**
     * 根据部门id查询所属的员工
     * @param deptIds
     * @return
     */
    List<UserEmpVO> getEmpByDept(@Param("deptIds") List<Long> deptIds);
}
